/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package negocio.ui;

import datos.Analito;
import datos.DatoGrafico;
import datos.ObjetoCombo;
import datos.TipoAnalito;
import db.ConectarDB;
import interfaz.FRLabPaez;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.swing.JOptionPane;
import negocio.cargador.CargadorLabPaez;
import negocio.administrador.LabPaez;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import negocio.cargador.CargadorGraficos;

/**
 *
 * @author Kriathos
 */
public class UILabPaez {

    private LabPaez administrador = new LabPaez();
    private CargadorLabPaez cargador = new CargadorLabPaez();
    private ConectarDB conn;
    CargadorGraficos CGLabPaez = new CargadorGraficos();

    public ConectarDB getConn() {
        if (conn == null) {
            conn = new ConectarDB();
        }
        return conn;
    }

    public void setConn(ConectarDB conn) {
        this.conn = conn;
    }

//-----------------------------------------------------------------------------------------------------------------------------
//METODOS DE CARGA INICIAL
//-----------------------------------------------------------------------------------------------------------------------------
    public void cargarTablasAlInicio(FRLabPaez ventana) {
        administrador.cargarBDPacientes();
        cargador.cargueTablaPacientes(ventana.getTablaPacientes(), LabPaez.getListaPacientes());
        administrador.cargarBDTipoAnalito();
        cargador.cargueTablaTipoAnalito(ventana.getTablaTipoAna(), administrador.getListaTipoAnalito());
        administrador.cargarBDTipoExamen();
        cargador.cargueTablaTipoExamen(ventana.getTablaTipoExamen(), administrador.getListaTipoExamen());
        administrador.cargarBDAnalitoParametro();
        cargador.cargueTablaAnalitoParametro(ventana.getTablaAna(), administrador.getListaAnalitoParametro());
    }//Fin de cargarTablasAlInicio

    public void cargarCombos(FRLabPaez ventana) {
        administrador.cargarCombos();
//        cargador.cargueCombo(ventana.getComboAnalitos(), LabPaez.getListaComboAnalitos());
        cargador.cargueCombo(ventana.getComboTipoExamen(), LabPaez.getListaComboExamenes());
        cargador.cargueCombo(ventana.getComboPacientes(), LabPaez.getListaComboPacientes());
        cargador.cargueCombo(ventana.getComboPacientes1(), LabPaez.getListaComboPacientes());
        cargador.cargueCombo(ventana.getCbTipoExamenAna(), LabPaez.getListaComboExamenes());
//        cargador.cargueCombo(ventana.getComboAnalitos1(), LabPaez.getListaComboAnalitos());
        cargador.cargueCombo(ventana.getCbTipoExamenTipoAna(), LabPaez.getListaComboExamenes());
    }//Fin de cargarCombos

    public void cargarCombos2(FRLabPaez ventana) {
        administrador.cargarCombos();
//        cargador.cargueCombo(ventana.getComboAnalitos(), LabPaez.getListaComboAnalitos());
//        cargador.cargueCombo(ventana.getComboTipoExamen(), LabPaez.getListaComboExamenes());
//        cargador.cargueCombo(ventana.getComboPacientes(), LabPaez.getListaComboPacientes());
        cargador.cargueCombo(ventana.getComboPacientes1(), LabPaez.getListaComboPacientes());
        cargador.cargueCombo(ventana.getCbTipoExamenAna(), LabPaez.getListaComboExamenes());
//        cargador.cargueCombo(ventana.getComboAnalitos1(), LabPaez.getListaComboAnalitos());
        cargador.cargueCombo(ventana.getCbTipoExamenTipoAna(), LabPaez.getListaComboExamenes());
    }//Fin de cargarCombos

//-----------------------------------------------------------------------------------------------------------------------------
//METODOS DE PACIENTE
//-----------------------------------------------------------------------------------------------------------------------------
    public void insertarPacientes(FRLabPaez ventana) {
        try {
            String nombre = ventana.getTxtNombre().getText();
            String apellido1 = ventana.getTxtApellido1().getText();
            String apellido2 = ventana.getTxtApellido2().getText();
            String telefono = ventana.getTxtTelefono().getText();
            String correo = ventana.getTxtCorreo().getText();
            String cedula = ventana.getTxtIdentificacion().getText();
            int edad = Integer.parseInt(ventana.getTxtEdad().getText());

            int y = comprobarCedula(cedula);
            if (y == 2) {
                String query = "INSERT INTO `labpaezdb`.`paciente` (`nombre`,`apellido1`,`apellido2`,`identificacion`,`edad`,`telefono`,`correo`) VALUES ('"
                        + nombre + "','" + apellido1 + "','" + apellido2 + "','" + cedula + "','" + edad + "','" + telefono
                        + "','" + correo + "')";

                boolean x = getConn().ejecutarQuery(query);
                if (x = true) {
                    ventana.getTxtNombre().setText("");
                    ventana.getTxtApellido1().setText("");
                    ventana.getTxtApellido2().setText("");
                    ventana.getTxtTelefono().setText("");
                    ventana.getTxtCorreo().setText("");
                    ventana.getTxtIdentificacion().setText("");
                    ventana.getTxtEdad().setText("");
                    JOptionPane.showMessageDialog(ventana, "Insertado Correctamente", "Informacion", JOptionPane.PLAIN_MESSAGE);
                } else {
                    JOptionPane.showMessageDialog(ventana, "Error al procesar los datos", "Error", JOptionPane.ERROR_MESSAGE);
                }

                administrador.cargarBDPacientes();
                cargador.cargueTablaPacientes(ventana.getTablaPacientes(), LabPaez.getListaPacientes());
            } else if (y == 1) {
                JOptionPane.showMessageDialog(ventana, "La identificacion ya se encuentra en la base de datos", "Error", JOptionPane.ERROR_MESSAGE);
            } else {
                JOptionPane.showMessageDialog(ventana, "Error al procesar los datos", "Error", JOptionPane.ERROR_MESSAGE);
            }
        } catch (Exception e) {
            System.out.println(e);
            JOptionPane.showMessageDialog(ventana, "Debe digitar valores en todas las casillas", "Error", JOptionPane.ERROR_MESSAGE);
        }
    }//Fin de insertarPacientes

    public void modificarPacientes(FRLabPaez ventana) {
        try {
            ConectarDB conn = new ConectarDB();
            String nombre = ventana.getTxtNombre().getText();
            String apellido1 = ventana.getTxtApellido1().getText();
            String apellido2 = ventana.getTxtApellido2().getText();
            String telefono = ventana.getTxtTelefono().getText();
            String correo = ventana.getTxtCorreo().getText();
            String cedula = ventana.getTxtIdentificacion().getText();
            String cedulaMod = ventana.getTxtIdentificacionMod().getText();
            int edad = Integer.parseInt(ventana.getTxtEdad().getText());

            String query = "UPDATE `labpaezdb`.`paciente` SET `nombre` = '" + nombre + "',`apellido1` = '" + apellido1 + "',`apellido2` = '" + apellido2 + "',"
                    + "`identificacion` = '" + cedula + "',`edad` = '" + edad + "',`telefono` = '" + telefono + "',`correo` = '" + correo + "' WHERE identificacion ='"
                    + cedulaMod + "';";

            boolean x = getConn().ejecutarQuery(query);
            if (x = true) {
                ventana.getTxtNombre().setText("");
                ventana.getTxtApellido1().setText("");
                ventana.getTxtApellido2().setText("");
                ventana.getTxtTelefono().setText("");
                ventana.getTxtCorreo().setText("");
                ventana.getTxtIdentificacion().setText("");
                ventana.getTxtEdad().setText("");
                ventana.getTxtIdentificacionMod().setText("");
                JOptionPane.showMessageDialog(ventana, "Modificado Correctamente", "Informacion", JOptionPane.PLAIN_MESSAGE);
            } else {
                JOptionPane.showMessageDialog(ventana, "Error al procesar los datos", "Error", JOptionPane.ERROR_MESSAGE);
            }

            ventana.getTablaPacientes().removeAll();
            administrador.cargarBDPacientes();
            cargador.cargueTablaPacientes(ventana.getTablaPacientes(), administrador.getListaPacientes());
        } catch (Exception e) {
            System.out.println(e);
            JOptionPane.showMessageDialog(ventana, "Debe digitar valores en todas las casillas", "Error", JOptionPane.ERROR_MESSAGE);
        }
    }//Fin de modificarPacientes

    public void visualizarPacientes(FRLabPaez ventana) {
        String cedulaMod = ventana.getTxtIdentificacionMod().getText();
        if (cedulaMod.equalsIgnoreCase("")) {
            JOptionPane.showMessageDialog(ventana, "Debe digitar una identificacion", "Error", JOptionPane.ERROR_MESSAGE);
        } else {
            boolean x = administrador.cargarBDPacientesVisualizar(ventana, cedulaMod);
            if (x == true) {
                cargador.cargueTablaPacientes(ventana.getTablaPacientes(), administrador.getListaPacientes());
            } else {
                JOptionPane.showMessageDialog(ventana, "La identificacion no existe en la base de datos", "Error", JOptionPane.ERROR_MESSAGE);
            }
        }
    }//Fin de visualizarPacientes

    public void limpiarPaciente(FRLabPaez ventana) {
        ventana.getTxtNombre().setText("");
        ventana.getTxtApellido1().setText("");
        ventana.getTxtApellido2().setText("");
        ventana.getTxtTelefono().setText("");
        ventana.getTxtCorreo().setText("");
        ventana.getTxtIdentificacion().setText("");
        ventana.getTxtEdad().setText("");
        ventana.getTxtIdentificacionMod().setText("");
        cargarTablasAlInicio(ventana);
    }//Fin de limpiarPaciente

//-----------------------------------------------------------------------------------------------------------------------------
//METODOS DE TIPO EXAMEN
//-----------------------------------------------------------------------------------------------------------------------------
    public void insertarTipoExamen(FRLabPaez ventana) {
        String nombre = ventana.getTxtTipoExamen().getText();
        int y = comprobarNombreTipoExamen(nombre);
        if (nombre.equalsIgnoreCase("")) {
            JOptionPane.showMessageDialog(ventana, "Debe digitar un nombre al tipo de examen", "Error", JOptionPane.ERROR_MESSAGE);
        } else {
            if (y == 2) {
                String query = "INSERT INTO `labpaezdb`.`tiposexamen` (`descripcion`) VALUES ('"
                        + nombre + "');";

                boolean x = getConn().ejecutarQuery(query);
                if (x = true) {
                    ventana.getTxtTipoExamen().setText("");
                    JOptionPane.showMessageDialog(ventana, "Insertado Correctamente", "Informacion", JOptionPane.PLAIN_MESSAGE);
                } else {
                    JOptionPane.showMessageDialog(ventana, "Error al procesar los datos", "Error", JOptionPane.ERROR_MESSAGE);
                }
                administrador.cargarBDTipoExamen();
                cargador.cargueTablaTipoExamen(ventana.getTablaTipoExamen(), administrador.getListaTipoExamen());
//                cargarCombos(ventana);
            } else if (y == 1) {
                JOptionPane.showMessageDialog(ventana, "El tipo de examen ya se encuentra en la base de datos", "Error", JOptionPane.ERROR_MESSAGE);
            } else {
                JOptionPane.showMessageDialog(ventana, "Error al procesar los datos", "Error", JOptionPane.ERROR_MESSAGE);
            }
        }
    }//Fin de insertarTipoExamen

//-----------------------------------------------------------------------------------------------------------------------------
//METODOS DE TIPO ANALITO
//-----------------------------------------------------------------------------------------------------------------------------
    public void insertarTipoAnalito(FRLabPaez ventana) {
        ObjetoCombo tipoExamenSeleccionado = (ObjetoCombo) ventana.getCbTipoExamenTipoAna().getSelectedItem();
        String nombre = ventana.getTxtTipoAna().getText();
        int y = comprobarNombreTipoAnalito(nombre);
        int z = comprobarIDExamen(tipoExamenSeleccionado.getId(), nombre);
        if (nombre.equalsIgnoreCase("")) {
            JOptionPane.showMessageDialog(ventana, "Debe digitar un nombre al analito", "Error", JOptionPane.ERROR_MESSAGE);
        } else {
            if (y == 2) {
                String query = "INSERT INTO `labpaezdb`.`tipoanalito` (`id_tipo_examen`,`descripcion`,`unidad`) VALUES ("
                        + tipoExamenSeleccionado.getId() + ",'" + nombre + "',null);";

                boolean x = getConn().ejecutarQuery(query);
                if (x = true) {
                    ventana.getTxtTipoAna().setText("");
                    JOptionPane.showMessageDialog(ventana, "Insertado Correctamente", "Informacion", JOptionPane.PLAIN_MESSAGE);
                } else {
                    JOptionPane.showMessageDialog(ventana, "Error al procesar los datos", "Error", JOptionPane.ERROR_MESSAGE);
                }
                administrador.cargarBDTipoAnalito();
                cargador.cargueTablaTipoAnalito(ventana.getTablaTipoAna(), administrador.getListaTipoAnalito());
            } else if (y == 1) {
                if (z == 2) {
                    String query = "INSERT INTO `labpaezdb`.`tipoanalito` (`id_tipo_examen`,`descripcion`,`unidad`) VALUES ("
                            + tipoExamenSeleccionado.getId() + ",'" + nombre + "',null);";

                    boolean x = getConn().ejecutarQuery(query);
                    if (x = true) {
                        ventana.getTxtTipoAna().setText("");
                        JOptionPane.showMessageDialog(ventana, "Insertado Correctamente", "Informacion", JOptionPane.PLAIN_MESSAGE);
                    } else {
                        JOptionPane.showMessageDialog(ventana, "Error al procesar los datos", "Error", JOptionPane.ERROR_MESSAGE);
                    }
                    administrador.cargarBDTipoAnalito();
                    cargador.cargueTablaTipoAnalito(ventana.getTablaTipoAna(), administrador.getListaTipoAnalito());
                } else {
                    JOptionPane.showMessageDialog(ventana, "El tipo de analito ya se encuentra en el examen", "Error", JOptionPane.ERROR_MESSAGE);
                }
            } else {
                JOptionPane.showMessageDialog(ventana, "Error al procesar los datos", "Error", JOptionPane.ERROR_MESSAGE);
            }
        }
    }//Fin de insertarTipoAnalito

//-----------------------------------------------------------------------------------------------------------------------------
//METODOS ANALITO
//-----------------------------------------------------------------------------------------------------------------------------    
    public void insertarAnalitoEnExamen(FRLabPaez ventana) {
        ObjetoCombo examenA = (ObjetoCombo) ventana.getCbTipoExamenAna().getSelectedItem();
        ObjetoCombo analitoA = (ObjetoCombo) ventana.getComboAnalitos1().getSelectedItem();
        double vmin = 0;
        double vmax = 0;
        double pmin = 0;
        double pmax = 0;
        String unidad = ventana.getTxtUnidad().getText();

        int x = comprobarAParametro(examenA.getId(), analitoA.getId());

        try {
            vmin = Double.parseDouble(ventana.getTxtValorMin().getText());
        } catch (Exception e) {
            vmin = 0;
            System.out.println(e);
        }
        try {
            vmax = Double.parseDouble(ventana.getTxtValorMax().getText());
        } catch (Exception e) {
            vmax = 0;
            System.out.println(e);
        }
        try {
            pmin = Double.parseDouble(ventana.getTxtPorMin().getText());
        } catch (Exception e) {
            pmin = 0;
            System.out.println(e);
        }
        try {
            pmax = Double.parseDouble(ventana.getTxtPorMax().getText());
        } catch (Exception e) {
            pmax = 0;
            System.out.println(e);
        }

        if (x == 2) {
            String query = "UPDATE `labpaezdb`.`tipoanalito` SET `unidad` = '" + unidad + "' WHERE `id_tipo_analito` = " + analitoA.getId() + " AND `id_tipo_examen` = " + examenA.getId() + ";";
            String query2 = "INSERT INTO `labpaezdb`.`analitosparametro` (`valor_min`, `valor_max`, `porcentaje_min`, `porcentaje_max`, `id_tipo_analito`, `id_tipo_examen`) VALUES "
                    + "(" + vmin + "," + vmax + "," + pmin + "," + pmax + "," + analitoA.getId() + "," + examenA.getId() + ");";
            getConn().ejecutarQuery(query);
            boolean y = getConn().ejecutarQuery(query2);
            if (y = true) {
                ventana.getTxtUnidad().setText("");
                ventana.getTxtValorMin().setText("");
                ventana.getTxtValorMax().setText("");
                ventana.getTxtPorMin().setText("");
                ventana.getTxtPorMax().setText("");
                JOptionPane.showMessageDialog(ventana, "Insertado Correctamente", "Informacion", JOptionPane.PLAIN_MESSAGE);
            } else {
                JOptionPane.showMessageDialog(ventana, "Error al procesar los datos", "Error", JOptionPane.ERROR_MESSAGE);
            }
            administrador.cargarBDAnalitoParametro();
            cargador.cargueTablaAnalitoParametro(ventana.getTablaAna(), LabPaez.getListaAnalitoParametro());
        } else if (unidad.equalsIgnoreCase("")) {
            JOptionPane.showMessageDialog(ventana, "Debe digitar todos los campos", "Error", JOptionPane.ERROR_MESSAGE);
        } else {
        }
    }//Fin de insertarAnalitoEnExamen

    public void visualizarAnalitoEnExamen(Object obj) {
//        obj;
    }

//-----------------------------------------------------------------------------------------------------------------------------
//METODOS DE EXAMEN
//-----------------------------------------------------------------------------------------------------------------------------
    public void agregarAListaTempAnalitos(FRLabPaez ventana) {
        ObjetoCombo analitoSeleccionado = (ObjetoCombo) ventana.getComboAnalitos().getSelectedItem();
        administrador.agregarAnalitoListaTemp(analitoSeleccionado.getDescripcion(),
                analitoSeleccionado.getId(), Double.parseDouble(ventana.getTxtValor().getText()),
                Double.parseDouble(ventana.getTxtPorcentaje().getText()));
        cargador.cargueListaTempAnalitos(ventana.getTblAnalitos(), LabPaez.getListaTempAnalitos());
        ventana.getComboAnalitos().setSelectedIndex(0);
        ventana.getTxtValor().setText("");
        ventana.getTxtPorcentaje().setText("");
    }//Fin de agregarAListaTempAnalitos

    public void cargarComboAnalitosFiltrado(FRLabPaez ventana) {
        administrador.cargarCombosAnalitosEnExamen(((ObjetoCombo) ventana.getComboTipoExamen().getSelectedItem()).getId());
        cargador.cargueCombo(ventana.getComboAnalitos(), LabPaez.getListaComboAnalitosEnExamenes());
    }

    public void cargarComboAnalitosFiltradoTEx(FRLabPaez ventana) {
        administrador.cargarCombosAnalitosEnExamen(((ObjetoCombo) ventana.getCbTipoExamenAna().getSelectedItem()).getId());
        cargador.cargueCombo(ventana.getComboAnalitos1(), LabPaez.getListaComboAnalitosEnExamenes());
    }

    public void agregarExamen(FRLabPaez ventana) {
        Connection myConn = getConn().abrirConexion();
        String recomendaciones = ventana.getTxtARecomendaciones().getText();
        String observaciones = ventana.getTxtAObservaciones().getText();
        Date fecha = ventana.getDateChooser().getDate();
        int idPaciente = ((ObjetoCombo) ventana.getComboPacientes().getSelectedItem()).getId();
        int idExamen = ((ObjetoCombo) ventana.getComboTipoExamen().getSelectedItem()).getId();
//        int idTipoAnalito = ((ObjetoCombo) ventana.getComboAnalitos().getSelectedItem()).getId();
//        double valor = Double.parseDouble(ventana.getTxtValor().getText());
//        double porcentaje = Double.parseDouble(ventana.getTxtPorcentaje().getText());
        ArrayList<Analito> listaAnalitos = new ArrayList<>();
        listaAnalitos = LabPaez.getListaTempAnalitos();
        try {
            myConn.setAutoCommit(false);
            Statement stmt = myConn.createStatement();
            //Traer el ultimo Id de Examen
            ResultSet rs = stmt.executeQuery("select max(id_examen) from examen;");
            int maxIdExamen = 0;
            try {
                while (rs.next()) {
                    maxIdExamen = Integer.parseInt(rs.getString(1));
                }
            } catch (SQLException | NumberFormatException e) {
                System.err.println("Sin Registros en la Tabla Examen");
                maxIdExamen = 0;
            }

            //Traer el ultimo Id de Examen Paciente
            rs = stmt.executeQuery("select max(id_examen_paciente) from examenpaciente;");
            int maxIdExamenPaciente = 0;
            try {
                while (rs.next()) {
                    maxIdExamenPaciente = Integer.parseInt(rs.getString(1));
                }
            } catch (SQLException | NumberFormatException e) {
                System.err.println("Sin Registros en la Tabla ExamenPaciente");
                maxIdExamenPaciente = 0;
            }


            //Traer el ultimo Id de Analito
            rs = stmt.executeQuery("select max(id_analito) from analito;");
            int maxIdAnalito = 0;
            try {
                while (rs.next()) {
                    maxIdAnalito = Integer.parseInt(rs.getString(1));
                }
            } catch (SQLException | NumberFormatException e) {
                System.err.println("Sin Registros en la Tabla Analito");
                maxIdAnalito = 0;
            }

            //Traer el ultimo Id de Analito en Examen
            rs = stmt.executeQuery("select max(id_analito_en_examen) from analitoenexamen;");
            int maxIdAnalitoEnExamen = 0;
            try {
                while (rs.next()) {
                    maxIdAnalitoEnExamen = Integer.parseInt(rs.getString(1));
                }
            } catch (SQLException | NumberFormatException e) {
                System.err.println("Sin Registros en la Tabla AnalitoEnExamen");
                maxIdAnalitoEnExamen = 0;

            }

            maxIdExamen++;
            String query = "INSERT INTO `labpaezdb`.`examen` (`id_examen`,`id_tipo_examen`) VALUES ('"
                    + maxIdExamen + "','" + idExamen + "');";
            stmt.executeUpdate(query);

            java.sql.Date fechaSQL = new java.sql.Date(fecha.getTime());
            maxIdExamenPaciente++;
            query = "INSERT INTO `labpaezdb`.`examenpaciente` (`id_examen_paciente`,`id_paciente`,"
                    + "`id_examen`,`fecha`,`observaciones`,`recomendaciones`) VALUES ('"
                    + maxIdExamenPaciente + "','" + idPaciente + "','" + maxIdExamen + "','"
                    + fechaSQL + "','" + observaciones + "','" + recomendaciones + "');";
            stmt.executeUpdate(query);

            for (int i = 0; i < listaAnalitos.size(); i++) {
                maxIdAnalito++;
                Analito analito = listaAnalitos.get(i);
                query = "INSERT INTO `labpaezdb`.`analito` (`id_analito`,`valor`,"
                        + "`porcentaje`,`id_tipo_analito`) VALUES ('"
                        + maxIdAnalito + "','" + analito.getValor() + "','" + analito.getPorcentaje() + "','"
                        + analito.getIdAnalito() + "');";
                stmt.executeUpdate(query);

                maxIdAnalitoEnExamen++;
                query = "INSERT INTO `labpaezdb`.`analitoenexamen` (`id_analito_en_examen`,`id_examen`,"
                        + "`id_analito`) VALUES ('" + maxIdAnalitoEnExamen + "','" + maxIdExamen
                        + "','" + maxIdAnalito + "');";
                stmt.executeUpdate(query);
            }
            myConn.commit();

            ventana.getTxtARecomendaciones().setText("");
            ventana.getTxtAObservaciones().setText("");
            ventana.getDateChooser().setDate(null);
            LabPaez.setListaTempAnalitos(new ArrayList<Analito>());
            ventana.getComboPacientes().setSelectedIndex(0);
            ventana.getComboTipoExamen().setSelectedIndex(0);
            cargador.cargueListaTempAnalitos(ventana.getTblAnalitos(), LabPaez.getListaTempAnalitos());

            if (myConn != null) {
                myConn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();

            if (conn != null) {
                try {
                    myConn.rollback();
                    System.out.println("Connection rollback...");
                } catch (Exception ex) {
                }
            }
        }
    }//Fin de agregarExamen

//-----------------------------------------------------------------------------------------------------------------------------
//METODOS DE COMPROBACION
//-----------------------------------------------------------------------------------------------------------------------------    
    private int comprobarNombreTipoExamen(String nombre) {
//        1 = Si se encuentra un nombre igual
//        2 = no se encuentra un nombre igual
//        3 = hubo un error
        String query = "SELECT * FROM labpaezdb.tiposexamen WHERE descripcion = '" + nombre + "'";
        ResultSet rs = getConn().ejecutarQueryRS(query);
        try {
            if (rs.next() != false) {
                return 1;
            } else {
                return 2;
            }
        } catch (Exception e) {
            System.out.println(e);
            return 3;
        }
    }//Fin de comprobarNombreTipoExamen

    public int comprobarCedula(String cedula) {
//        1 = Si se encuentra una cedula igual
//        2 = no se encuentra una cedula igual
//        3 = hubo un error
        String query = "SELECT * FROM labpaezdb.paciente WHERE identificacion = '" + cedula + "'";
        ResultSet rs = getConn().ejecutarQueryRS(query);
        try {
            if (rs.next() != false) {
                return 1;
            } else {
                return 2;
            }
        } catch (Exception e) {
            System.out.println(e);
            return 3;
        }
    }//Fin de comprobarCedula

    public int comprobarNombreTipoAnalito(String nombre) {
//        1 = Si se encuentra un nombre igual
//        2 = no se encuentra un nombre igual
//        3 = hubo un error
        String query = "SELECT * FROM labpaezdb.tipoanalito WHERE descripcion = '" + nombre + "'";
        ResultSet rs = getConn().ejecutarQueryRS(query);
        try {
            if (rs.next() != false) {
                return 1;
            } else {
                return 2;
            }
        } catch (Exception e) {
            System.out.println(e);
            return 3;
        }
    }//Fin de comprobarNombreTipoAnalito

    public int comprobarIDExamen(int id, String analito) {
//        1 = Si se encuentra un nombre igual
//        2 = no se encuentra un nombre igual
//        3 = hubo un error
        String query = "SELECT * FROM labpaezdb.tipoanalito WHERE id_tipo_examen = " + id + " AND descripcion = '" + analito + "';";
        ResultSet rs = getConn().ejecutarQueryRS(query);
        try {
            if (rs.next() != false) {
                return 1;
            } else {
                return 2;
            }
        } catch (Exception e) {
            System.out.println(e);
            return 3;
        }
    }//Fin de comprobarIDExamen

    private int comprobarAParametro(int x, int y) {
//        1 = Si se encuentra un nombre igual
//        2 = no se encuentra un nombre igual
//        3 = hubo un error
        String query = "SELECT * FROM labpaezdb.tipoanalito WHERE id_tipo_analito =" + x + " AND id_tipo_examen =" + y + ";";
        ResultSet rs = getConn().ejecutarQueryRS(query);
        try {
            if (rs.next() != false) {
                return 1;
            } else {
                return 2;
            }
        } catch (Exception e) {
            System.out.println(e);
            return 3;
        }
    }//Fin de comprobarParametro

//-----------------------------------------------------------------------------------------------------------------------------
//METODOS CONSULTA DE EXAMENES
//-----------------------------------------------------------------------------------------------------------------------------        
    public void cargarComboExamenesPacientes(FRLabPaez ventana) {
        administrador.cargarComboExamenesPaciente(((ObjetoCombo) ventana.getComboPacientes1().getSelectedItem()).getId());
        cargador.cargueCombo(ventana.getComboTipoExamen1(), LabPaez.getListaComboExamenesDePaciente());
    }

    public void cargarDatosExamen(FRLabPaez ventana) {
        administrador.cargarListaAnalitosConsultaPac(((ObjetoCombo) ventana.getComboTipoExamen1().getSelectedItem()).getId(),
                ((ObjetoCombo) ventana.getComboPacientes1().getSelectedItem()).getId());
        cargador.cargueTablaAnalitosConsExamen(ventana, LabPaez.getListaAnalitosConsultaExamen());
    }

    public void enviarCorreo() {
        Properties props = new Properties();

        props.setProperty("mail.smtp.host", "smtp.gmail.com");
        props.setProperty("mail.smtp.starttls.enable", "true");
        props.setProperty("mail.smtp.port", "587");
        props.setProperty("mail.smtp.user", "noreplylabpaez@gmail.com");
        props.setProperty("mail.smtp.auth", "true");

        Session session = Session.getDefaultInstance(props);
        session.setDebug(true);

        MimeMessage message = new MimeMessage(session);
        try {
            message.setFrom(new InternetAddress("noreplylabpaez@gmail.com"));
//            message.addRecipient(Message.RecipientType.TO, new InternetAddress("luispicado26@gmail.com"));
//            message.addRecipient(Message.RecipientType.TO, new InternetAddress("ed2587@gmail.com"));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(LabPaez.getCorreoPaciente()));
            message.setSubject("Correo desde Java2");
        } catch (Exception e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, "Error enviando el correo, revise la dirección de correo y la conexión de Internet");
        }
//        message.setText("Contenido del mensaje desde java");

        StringBuilder html = new StringBuilder();
        html.append("<table border='2'>");

        html.append("<tr>");
        html.append("<th colspan='5'>");
        html.append("Resultados del Examen");
        html.append("</th>");
        html.append("<th>");
        html.append("Fecha: ");
        html.append("</th>");
        html.append("<th>");
        html.append(LabPaez.getFecha());
        html.append("</th>");
        html.append("</tr>");
        html.append("<tr>");
        html.append("<th>");
        html.append("Analito");
        html.append("</th>");
        html.append("<th>");
        html.append("Valor");
        html.append("</th>");
        html.append("<th>");
        html.append("Porcentaje");
        html.append("</th>");
        html.append("<th>");
        html.append("Valor Minimo");
        html.append("</th>");
        html.append("<th>");
        html.append("Valor Maximo");
        html.append("</th>");
        html.append("<th>");
        html.append("% Minimo");
        html.append("</th>");
        html.append("<th>");
        html.append("% Maximo");
        html.append("</th>");
        html.append("</tr>");

        for (int i = 0; i < LabPaez.getListaAnalitosConsultaExamen().size(); i++) {
            html.append("<tr>");
            html.append("<td>");
            html.append(LabPaez.getListaAnalitosConsultaExamen().get(i).getNombreAnalito());
            html.append("</td>");
            html.append("<td>");
            html.append(LabPaez.getListaAnalitosConsultaExamen().get(i).getValor());
            html.append("</td>");
            html.append("<td>");
            html.append(LabPaez.getListaAnalitosConsultaExamen().get(i).getPorcentaje());
            html.append("</td>");
            html.append("<td>");
            html.append(LabPaez.getListaAnalitosConsultaExamen().get(i).getValorMinParam());
            html.append("</td>");
            html.append("<td>");
            html.append(LabPaez.getListaAnalitosConsultaExamen().get(i).getValorMaxParam());
            html.append("</td>");
            html.append("<td>");
            html.append(LabPaez.getListaAnalitosConsultaExamen().get(i).getPorcentajeMinParam());
            html.append("</td>");
            html.append("<td>");
            html.append(LabPaez.getListaAnalitosConsultaExamen().get(i).getPorcentajeMaxParam());
            html.append("</td>");
            html.append("</tr>");
        }
        html.append("<tr>");
        html.append("<th colspan='3'>");
        html.append("Observaciones");
        html.append("</th>");
        html.append("<th colspan='4'>");
        html.append("Recomendaciones");
        html.append("</th>");
        html.append("</tr>");
        html.append("<tr>");
        html.append("<td colspan='3'>");
        html.append(LabPaez.getObservaciones());
        html.append("</td>");
        html.append("<td colspan='4'>");
        html.append(LabPaez.getRecomendaciones());
        html.append("</td>");
        html.append("</tr>");


        html.append("</table>");

//            message.setContent("<h1>Hello world HTML XD</h1>", "text/html");
        try {
            message.setContent(html.toString(), "text/html");

            //Esta comentado para que no me este mandando correos basura
            Transport t = session.getTransport("smtp");
            t.connect("smtp.gmail.com", "noreplylabpaez@gmail.com", "lab12345");
            t.sendMessage(message, message.getAllRecipients());
            t.close();
        } catch (Exception e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, "Error enviando el correo, revise la dirección de correo y la conexión de Internet");
        }

    }

//-----------------------------------------------------------------------------------------------------------------------------
//METODOS DE GRAFICOS
//-----------------------------------------------------------------------------------------------------------------------------     
    public void buscarGrafico(FRLabPaez ventana) {
        try {
            String query = "SELECT labpaezdb.tipoanalito.descripcion "
                    + "FROM labpaezdb.paciente, labpaezdb.examenpaciente, labpaezdb.examen, labpaezdb.analitoenexamen, labpaezdb.analito, labpaezdb.tipoanalito "
                    + "WHERE labpaezdb.paciente.id_paciente = labpaezdb.examenpaciente.id_paciente AND "
                    + "labpaezdb.examenpaciente.id_examen = labpaezdb.examen.id_examen AND "
                    + "labpaezdb.examen.id_examen = labpaezdb.analitoenexamen.id_examen AND "
                    + "labpaezdb.analitoenexamen.id_analito = labpaezdb.analito.id_analito AND "
                    + "labpaezdb.tipoanalito.id_tipo_analito = labpaezdb.analito.id_tipo_analito AND "
                    + "labpaezdb.paciente.identificacion = '" + ventana.getTxtIDGrafico().getText() + "' "
                    + "GROUP BY labpaezdb.tipoanalito.descripcion";
            ResultSet rs = getConn().ejecutarQueryRS(query);
            
            int x = 0;
            TipoAnalito ana = new TipoAnalito();
            ArrayList<TipoAnalito> ta = new ArrayList<>();
            
            while(rs.next()){
                x++;
                ana.setId(x);
                ana.setNombre(rs.getString(1));
                ta.add(ana);
                ana = new TipoAnalito();
            }
            
            cargador.cargueCombo2(ventana.getCbAnaGrafico(), ta);
        } catch (Exception e) {
            System.out.println(e);
        }
    }//Fin de buscarGrafico

    public void generarGrafico(FRLabPaez ventana) {
        try {
            String query = "SELECT labpaezdb.tipoanalito.descripcion, labpaezdb.analito.valor, labpaezdb.analitosparametro.valor_min, labpaezdb.analitosparametro.valor_max, "
                    + "labpaezdb.examenpaciente.fecha "
                    + "FROM labpaezdb.paciente, labpaezdb.examenpaciente, labpaezdb.examen, labpaezdb.analitoenexamen, labpaezdb.analito, labpaezdb.tipoanalito, labpaezdb.analitosparametro "
                    + "WHERE labpaezdb.paciente.id_paciente = labpaezdb.examenpaciente.id_paciente AND "
                    + "labpaezdb.examenpaciente.id_examen = labpaezdb.examen.id_examen AND "
                    + "labpaezdb.examen.id_examen = labpaezdb.analitoenexamen.id_examen AND "
                    + "labpaezdb.analitoenexamen.id_analito = labpaezdb.analito.id_analito AND "
                    + "labpaezdb.tipoanalito.id_tipo_analito = labpaezdb.analito.id_tipo_analito AND "
                    + "labpaezdb.analito.id_tipo_analito = labpaezdb.analitosparametro.id_tipo_analito AND "
                    + "labpaezdb.tipoanalito.descripcion = '"+ventana.getCbAnaGrafico().getSelectedItem().toString()+"' "
                    + "AND labpaezdb.paciente.identificacion = '"+ventana.getTxtIDGrafico().getText()+"'";
            
            ResultSet rs = getConn().ejecutarQueryRS(query);
            ArrayList<DatoGrafico> dg = new ArrayList<>();
            DatoGrafico graf = new DatoGrafico();
            
            while(rs.next()){
                graf.setNombre(rs.getString(1));
                graf.setValor(Double.parseDouble(rs.getString(2)));
                graf.setMin(Double.parseDouble(rs.getString(3)));
                graf.setMax(Double.parseDouble(rs.getString(4)));
                graf.setDate(rs.getString(5));
                dg.add(graf);
                graf = new DatoGrafico();
            }
            CGLabPaez.dibujarGraficos(dg);
        } catch (Exception e) {
            System.out.println(e);
        }
    }//Fin de generarGrafico
}//Fin de class
